package done.easy_801_900;

import org.junit.Test;

import static com.study.util.LogUtil.info;
import static java.lang.Math.min;

/**
 * 821. Shortest Distance to a Character 字符的最短距离
 * <p>
 * 给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每
 * 个字符到字符串 S 中的字符 C 的最短距离的数组。
 * <p>
 * 示例 1:
 * 输入: S = "loveleetcode", C = 'e'
 * 输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]
 */
@SuppressWarnings("all")
public class ShortestDistanceToACharacter {

    /**
     * JAVA 实现：创建一个整型数组，默认值为 0，每个字符 C 对应的位置值为 0，故不需要更改。
     * 每找到一个字符 C，就对 C 前面的位置进行赋值，数值应为该位置到前后两个字符 C 之间的
     * 最小距离；最后把 最后一个字符 C 后面的位置赋值即可。
     */
    public int[] shortestToChar(String S, char C) {
        // 190409 first
        return null;
    }

    @Test
    public void test() {
        info(shortestToChar("loveleetcode", 'e'));
        info(new int[]{3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0});
    }
}































/*
public int[] shortestToChar(String S, char C) {
    if(S == null || S.length() == 0) {
        return new int[0];
    }

    //S的长度
    int len   = S.length();
    //返回结果
    int[] ans = new int[len];
    //最近一个c的位置
    int preC  = -1;

    //NO.1 先找到 C 的位置, 再对 C 前面的位置赋值
    for (int i = 0; i < len; i++) {

        //NO.2 定位到c的位置
        if (C == S.charAt(i)) {
            int j = i-1;

            //NO.3 给每一个C前面的字符赋值
            //如果前面没有c, preC == -1 就是 i-j
            //如果前面有c,  preC != -1 就是 i-j 和 j - preC 的最小值
            for (;j > preC;j--) {
                ans[j] = (preC == -1) ? i-j : min(j - preC, i - j);
            }

            //给preC赋值
            preC = i;
        }
    }

    //NO.4 最后一个 C 后面的位置赋值
    for (int i = preC + 1; i < len; i++) {
        ans[i] = i - preC;
    }
    return ans;
}
*/
